﻿Public Class FrmIzin

	Public Caller As CtlPersonel
	Public Kod As Integer

	Sub New(ByVal EntryType As String)
		InitializeComponent()
		Dim Items As New List(Of SourceItem)
		Items.Add(New SourceItem("I", "Yıllık izin"))
		Items.Add(New SourceItem("H", "Hastalık izni"))
		Items.Add(New SourceItem("M", "Mazaret izni"))
		Items.Add(New SourceItem("O", "Özel mazaret izni"))
		Items.Add(New SourceItem("S", "Saatlik izin"))
		Items.Add(New SourceItem("P", "Toplu saatlik izin"))
		If EntryType = "B" Then Items.Add(New SourceItem("B", "Yıllık izin başvurusu"))
		Type.LoadItems(Items)
		Type.SelectedValue = EntryType
		Personel.LoadItems(Service.Personel.Liste(Kullanici.Birim))
		AddHandler Button2.Click, AddressOf Close
		If EntryType = "B" Then Type.Enabled = False
		Button4.Image = My.Resources.print
	End Sub

	Private Function OzelDurum(ByVal d As Date) As Boolean
		If d.Month = 1 And d.Day = 1 Then Return True
		Return False
	End Function

	Sub SetPersonel(ByVal Kod As String)
		Personel.SetValue(Kod)
		Personel.Enabled = False
	End Sub

	Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
		Try
			Select Case Type.SelectedValue
				Case "I"
					If Check(Tarih1, Not OzelDurum(Tarih1.Value.Date) AndAlso Tarih1.Value.Date.Tatil, "Başlangıç günü olarak tatil günü seçemezsiniz.") Then Exit Sub
					If Check(Tarih2, Tarih2.Value.Date.Tatil, "Bitiş günü olarak tatil günü seçemezsiniz.") Then Exit Sub
					Service.Izin.YillikKaydet(Kod, Personel.Value, Tarih1.Value.Date, Tarih2.Value.Date, EvrakNo.Text, Kullanici.Kod)
				Case "H"
					Service.Izin.HastalikKaydet(Kod, Personel.Value, Tarih1.Value.Date, Tarih2.Value.Date, EvrakNo.Text, Kullanici.Kod)
				Case "M"
					If Check(Tarih1, Tarih1.Value.Date.Tatil, "Tarih olarak tatil günü seçemezsiniz.") Then Exit Sub
					Service.Izin.MazaretKaydet(Kod, Personel.Value, Tarih1.Value.Date, Tarih2.Value.Date, EvrakNo.Text, Kullanici.Kod)
				Case "O"
					If Check(Tarih1, Tarih1.Value.Date.Tatil, "Tarih olarak tatil günü seçemezsiniz.") Then Exit Sub
					Service.Izin.OzelMazaretKaydet(Kod, Personel.Value, Tarih1.Value.Date, Tarih2.Value.Date, EvrakNo.Text, Kullanici.Kod)
				Case "S"
					If Check(Tarih1, Tarih1.Value.Date.Tatil, "Başlangıç günü olarak tatil günü seçemezsiniz.") Then Exit Sub
					If Check(Saat1, Saat1.Text = "", "Başlangıç saatini seçmek zorundasınız.") Then Exit Sub
					If Check(Saat2, Saat2.Text = "", "Bitiş saatini seçmek zorundasınız.") Then Exit Sub
					If Check(Saat1, Saat2.Text < Saat1.Text, "Bitiş saati başlangıç saatinden sonra olmalıdır.") Then Exit Sub
					Service.Izin.SaatlikKaydet(Personel.Value, Tarih1.Value.Date, Saat1.Text, Saat2.Text, Kullanici.Kod)
				Case "P"
					If Check(Tarih1, Tarih1.Value.Date.Tatil, "Tarih olarak tatil günü seçemezsiniz.") Then Exit Sub
					Service.Izin.SaatlikTopluKaydet(Kod, Personel.Value, Tarih1.Value.Date, Gun.Value, 0, EvrakNo.Text, Kullanici.Kod)
				Case "B"
					If Check(Tarih1, Tarih1.Value.Date.Tatil, "Başlangıç günü olarak tatil günü seçemezsiniz.") Then Exit Sub
					If Check(Tarih2, Tarih2.Value.Date.Tatil, "Bitiş günü olarak tatil günü seçemezsiniz.") Then Exit Sub
					Service.Talep.Kaydet(Kullanici.Kod, Tarih1.Value.Date, Tarih2.Value.Date, Kullanici.Kod)
			End Select
			If Not Caller Is Nothing Then Caller.Reload()
			Close()
		Catch ex As Exception
			Warning("Kayıt sırasında bir hata oluştu.")
		End Try
	End Sub

	Private Sub Tarih1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Tarih1.ValueChanged
		Tarih2.Value = Tarih1.Value
	End Sub

	Private Sub Tarih2_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Tarih2.ValueChanged, Tarih1.ValueChanged
		Try
			If DateDiff(DateInterval.DayOfYear, Tarih1.Value, Tarih2.Value) > 100 Then GunSayisi.Text = 0 : Exit Sub
			GunSayisi.Text = GunHesapla(Tarih1.Value.Date, Tarih2.Value.Date) & " gün."
			Dim BasTatil = Not OzelDurum(Tarih1.Value.Date) AndAlso Tarih1.Value.Date.Tatil
			Dim BitTatil = Tarih2.Value.Date.Tatil
			If BasTatil And BitTatil Then
				GunSayisi.Text &= " Baş. ve bit. tarihleri tatil günüdür."
			ElseIf BasTatil Then
				GunSayisi.Text &= " Başlangıç tarihi tatil günüdür."
			ElseIf BitTatil Then
				GunSayisi.Text &= " Bitiş tarihi tatil günüdür."
			End If
		Catch ex As Exception
			Warning("İzin günleri kontrol edilirken bir hata oluştu.")
		End Try
	End Sub

	Private Sub Saat1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Saat1.SelectedValueChanged
		Saat2.SelectedIndex = Saat1.SelectedIndex
	End Sub

	Private Sub Saat2_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Saat1.SelectedValueChanged, Saat2.SelectedValueChanged
		If Saat1.Text = "" OrElse Saat2.Text = "" OrElse Saat1.Text > Saat2.Text Then GunSayisi.Text = ""
		GunSayisi.Text = SaatHesapla(Saat1.Text, Saat2.Text) & " saatlik izin kullanımı."
	End Sub

	Private Sub Type_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Type.SelectedValueChanged
		If Not Type.SelectedValue Is Nothing Then PicIzin.Image = GetImage(Type.SelectedValue, PicIzin.Width, PicIzin.Height)
		Tarih2.Visible = Type.SelectedValue <> "S" And Type.SelectedValue <> "P"
		Saat1.Visible = Type.SelectedValue = "S"
		Saat2.Visible = Type.SelectedValue = "S"
		Gun.Visible = Type.SelectedValue = "P"
		Select Case Type.SelectedValue
			Case "I" : Text = "Yıllık İzin"
			Case "H" : Text = "Hastalık İzni"
			Case "M" : Text = "Mazaret İzni"
			Case "O" : Text = "Özel Mazaret İzni"
			Case "S" : Text = "Saatlik İzin"
			Case "P" : Text = "Toplu Saatlik İzin"
			Case "B" : Text = "Yıllık İzin Talebi"
		End Select
	End Sub

	Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
		If Caller.TalepIptali() Then Close()
	End Sub

	Shared Function GetImage(ByVal Type As String, ByVal x As Integer, ByVal y As Integer) As Bitmap
		Select Case Type
			Case "I" : Return My.Resources.calendar.Resize(x, y).IncColors(-16, -16, 32)
			Case "H" : Return My.Resources.calendar.Resize(x, y).IncColors(32, -16, -16)
			Case "M" : Return My.Resources.calendar.Resize(x, y).IncColors(32, 16, -48)
			Case "O" : Return My.Resources.calendar.Resize(x, y).IncColors(0, -16, -80)
			Case "S" : Return My.Resources.saat.Resize(x, y)
			Case "P" : Return My.Resources.calendar.Resize(x, y).IncColors(-32, 16, 16)
			Case "B" : Return My.Resources.calendar.Resize(x, y)
		End Select
		Return Nothing
	End Function

	Sub Open(ByVal Kod As Integer)
		Me.Kod = Kod
		Dim Hareket = Service.Izin.Oku(Kod)
		If TypeOf Hareket Is HareketYillikIzin Then
			Type.SelectedValue = "I"
			Tarih1.Value = Hareket.Tarih1
			Tarih2.Value = Hareket.Tarih2
		ElseIf TypeOf Hareket Is HareketHastalikIzni Then
			Type.SelectedValue = "H"
			Tarih1.Value = Hareket.Tarih1
			Tarih2.Value = Hareket.Tarih2
		ElseIf TypeOf Hareket Is HareketMazaretIzni Then
			Type.SelectedValue = "M"
			Tarih1.Value = Hareket.Tarih1
			Tarih2.Value = Hareket.Tarih2
		ElseIf TypeOf Hareket Is HareketSaatlikToplamIzin Then
			Type.SelectedValue = "P"
			Tarih1.Value = Hareket.Tarih
			Gun.Value = CType(Hareket, HareketSaatlikToplamIzin).Gun
		End If
		EvrakNo.Text = Hareket.EvrakNo
		Type.Enabled = False
		Personel.Enabled = False
	End Sub

End Class